C# 使用 log4net 记录日志 |
您所在的位置:网站首页 › log4net debug日志 › C# 使用 log4net 记录日志 |
Ø 前言 在一般的开发应用中,都会涉及到日志记录,用于排查错误 或 记录程序运行时的日志信息。log4net 库是 Apache log4j 框架在 Microsoft .NET 平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的组件。 下面介绍下如何在 C# 中如何使用 log4net 记录日志,主要分为以下几点: 1. 引用 log4net.dll 程序集。 2. 编写 log4net 的配置信息。 3. 调用(记录日志)。 4. 其他。
1. 引用 log4net.dll 程序集(不多说很简单) 1) 使用 NuGet 包管理器下载 log4net。下载成功后会包含 log4net.dll 和 log4net.xml 文件。 2) 或者在项目中手动引用 log4net.dll 程序集。 3) 引入 log4net 命名空间。
2. 编写 log4net 的配置信息 1) 在 App.config 或 Web.config 配置文件的根节点“”中加入如下配置: 1. section 节点(注意:configSections 节点必须为 configuration 的第一个子节点)
2. log4net 节点
3. 参数节点解释 1) RollingStyle:创建日志文件的方式,可选值: 1. date:按日期。 2. composite:按日期及文件大小,默认值。 3. size:按文件大小。 4. once:每启动一次创建一个新文件。 2) File:日志文件夹目录或名称。当 RollingStyle 为 date 或 composite 时,设置日志存储目录;否则,设置目录+文件名,已经扩展支持虚拟目录。 3) DatePattern:日志文件名的日期格式,只有当 RollingStyle 为 date/composite 时有效。 4) StaticLogFileName:日志文件名是否为静态。true/fasle,默认为 true。为 true 时,RollingStyler的date值将无效,这时需要设置 File 的文件名。 5) MaximumFileSize:当RollingStyle为Composite 或 Size 时,设置最大文件大小,可选值:B、KB、MB、GB,默认为字节。例如:10MB。 6) MaxSizeRollBackups:备份日志数量,默认为0。在CountDirection为负数时有效。 7) CountDirection:默认值为-1。当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。大于-1的值时,File设置的文件名会依次加上0、1、2递增。当等于或小于-1时,创建依赖于MaxSizeRollBackups参数值。 8) AppendToFile:当日志文件存在时,是否向日志文件中追加内容。true/fasle,默认为 true。 9) Threshold:起始日志级别,低于此级别的日志不会被记录。
4. conversionPattern 节点解释 Ø 下面是 conversionPattern 节点的解释,注意区分大小写。 1) %newline, %n: 换行。 2) %数字,%-数字: 表示该项的固定长度。长度不足时:“%数字”在前面填充空格,“%-数字”则在后面填充空格。 3) %username: 登录用户名,例如:LCLGO\GOO。 4) %property, %P, %X: 机器名及登录用户名:{log4net:Identity=, log4net:UserName=LCLGO\GOO, log4net:HostName=LCLGO}。 5) %thread, %t: 线程Id。 6) %date, %d: 日期,格式化:%d{yyyy-MM-dd HH:mm:ss:fff}。 7) %level, %p: 消息等级(INFO、DEBUG、WARN、ERROR、FATAL)。 8) %message, %m: 消息内容。 9) %type, %class, %C: 记录日志的 Class 名称。 10) %method, %M: 记录日志的方法名,例如:Method1。 11) %location, %l: 日志记录位置,例如:Log4netTest.MyLog4net.Method1(f:\Log4netTest\MyLog4net.cs:42)。 12) %line, %L: 语句所在行号,例如:42。 13) %file, %F: 日志所在 class 文件绝对路径,例如:f:\Log4netTest\MyLog4net.cs。 14) %logger, %c: Logger 名称。 15) %timestamp, %r: 程序从运行到执行到当前语句时消耗的毫秒数。 16) %x: 输出:(null)。 17) %exception: 异常信息。 18) %property{Operator}: 操作者ID。 19) %property{Action}: 操作类型。 20) %property{Message}: 消息描述。 21) %property{NDC}: 输出:(null)。 2) 也可以单独为 log4net 创建一个配置文件,命名为“log4net.config”,同样加入同上的配置信息。 3) 注意:在 App.config 或 Web.config 中设置了配置,如果又在 log4net.config 中也设置了配置,则加载 App.config 或 Web.config 中的配置。
3. 其他配置方式(可参考)
4. 调用(记录日志) 1) 首先,需要加载配置文件,有两种方式: 1. 在程序入口的命名空间头部添加程序集特性,例如: [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] namespace Log4netTest { } 注: 1) 省略 ConfigFile 属性时,则加载 App.config 或 Web.config 的配置。 2) 该定义之后,其他程序集同样可以输出日志。
2. 代码加载 1) 加载 App.config 或 Web.config 中的配置: log4net.Config.XmlConfigurator.Configure(); 2) 加载 log4net.config 文件中的配置: var configFile = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config")); log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile); 3) 加载配置位置: 1. 控制台应用程序、WinForm,可在 Main() 方法中调用。 2. WebForm、MVC、Web API,可在 Global.asax 的 Application_Start() 方法中调用。
3. 注意:如果使用 log4net.config 文件中的配置,记得将该文件的“复制到输出目录”的属性设置为始终复制 或 如果较新则赋值。
2) 记录日志 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using log4net;
[assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace Log4netTest { class Program { static void Main(string[] args) { Log4netTest2.MyLog4net myLog4net1 = new Log4netTest2.MyLog4net(); myLog4net1.Method1(); Console.ReadLine(); } } }
namespace Log4netTest2 { /// /// Log4net 测试类。 /// public class MyLog4net { /* * 步骤: * 1. 使用 NuGet 安装 log4net。 * 2. 将配置信息加入 Web.config/App.config 中, * 或另外添加 log4net.config 配置文件(注意:设置该文件属性的“复制到输出目录”为“始终复制”)。 * 3. 调用。 */
/// /// 根据类名获取日志记录器对象。 /// private static ILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void InitLog4Net() { //log4net.Config.XmlConfigurator.Configure();
//var configFile = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config")); //log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile); }
/// /// 测试方法1。 /// public void Method1() { InitLog4Net();
Logger.Info("这是 Info() 方法,用于记录【消息】。"); Logger.Debug("这是 Debug() 方法,用于记录【调试】消息。"); Logger.Warn("这是 Warn() 方法,用于记录【警告】消息。"); Logger.Error("这是 Error() 方法,用于记录【异常】消息。"); Logger.Fatal("这是 Fatal() 方法,用于记录【严重错误】消息。");
//Logger.Info(new Exception("这是 Info() 方法。【消息】")); //Logger.Debug(new Exception("这是 Debug() 方法。【调试】")); //Logger.Warn(new Exception("这是 Warn() 方法。【警告】")); //Logger.Error(new Exception("这是 Error() 方法。【异常】")); //Logger.Fatal(new Exception("这是 Fatal() 方法。【严重错误】"));
try { string str = null; str = str.ToString(); } catch (Exception ex) { Logger.Info(ex); }
try { Method2(); } catch (Exception ex) { Logger.Error(ex); } }
/// /// 方法2。 /// public static void Method2() { throw new Exception("方法2 抛出自定义异常"); } } }
3) 执行以上代码,将输出如下日志:
5. 其他 1) 除了以上给出的“日志信息排版模式”,例如:%d。其实,还可扩展自定义的排版模式,有兴趣的童鞋可以研究下,参考:http://www.cnblogs.com/cxd4321/archive/2012/07/21/2602378.html。 2) 如果希望将日志写入到数据库中,也是可以的。本文也没去尝试,有兴趣的话可参考:http://blog.csdn.net/kongwei521/article/details/52242319。 3) 其他参考链接: http://www.cnblogs.com/kissazi2/p/3392605.html http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
Ø 总结 对于 log4net,本人也只是初次接触(在实际的项目中使用到),以前也只是有点了解(只知道有这个组件)。因为要掌握它,就必须熟悉不少配置属性,所以特意整理下,方便日后忘记了查看。有好的建议或意见的朋友,欢迎提出,共同学习嘛^_^。好了,休息了。。。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |